package com.woniuxy.config;

import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.HashMap;
import java.util.Map;

/**
 * @Author: 马宇航
 * @Todo: TODO
 * @DateTime: 25/03/12/星期三 11:37
 * @Component: 成都蜗牛学苑
 **/
@Configuration
public class DeathConfig {
    //************************************正常队列和正常交换机***********************************************
    @Bean
    public Queue ttlQueue() {
        Map<String, Object> args = new HashMap<String, Object>();
        //设置队列中的消息过期时间
        args.put("x-message-ttl",5000);
        //设置队列的死信交换机
        setDeadLetterExchange(args);
        //参数解释： 队列名字，是否持久化，是否独占，是否自动删除
        return new Queue("ttlQueue",true,false,false,args);
    }
    @Bean
    public Queue normal5Queue() {
        Map<String, Object> args = new HashMap<String, Object>();
        //设置队列中的消息过期时间
        args.put("x-max-length",5);
        //设置队列的死信交换机
        setDeadLetterExchange(args);
        //参数解释： 队列名字，是否持久化，是否独占，是否自动删除
        return new Queue("normal5Queue",true,false,false,args);
    }
    //正常业务交换机
    @Bean
    public DirectExchange nomalExchange() {
        return new DirectExchange("nomalExchange",true,false);
    }
    //设置队列的死信交换机与队列之间的绑定关系，因为死信队列不止一个。
    private void setDeadLetterExchange(Map<String, Object> args) {
        //绑定死信交换机名字
        args.put("x-dead-letter-exchange", "deathExchange");
        //绑定死信routingkey
        args.put("x-dead-letter-routing-key", "deathRouting");
    }
    //bingding ttl的过期的
    @Bean
    public Binding ttlBinding() {
        return BindingBuilder.bind(ttlQueue()).to(nomalExchange()).with("ttlRouting");
    }
    //bingding 绑定队列有限制的
    @Bean
    public Binding normal5Binding() {
        return BindingBuilder.bind(normal5Queue()).to(nomalExchange()).with("normalRouting");
    }

    //************************************正常队列和正常交换机***********************************************
    //************************************死信队列和死信交换机***********************************************
    //死信交换机：和正常交换机一样
    @Bean
    public DirectExchange deathExchange() {
        return new DirectExchange("deathExchange",true,false);
    }
    @Bean
    public Queue deathQueue() {
        //参数解释： 队列名字，是否持久化，是否独占，是否自动删除
        return new Queue("deathQueue",true,false,false);
    }
    @Bean
    public Binding deathBinding() {
        return BindingBuilder.bind(deathQueue()).to(deathExchange()).with("deathRouting");
    }
}
